Задача: построить рисунок двумерного эластичного маятника, параметризованный расстоянием от центра груза до точки подвеса и углом отклонения от вертикали.

Параметры рисунка

Груз (шарик)

R=1; (* радиус *)

Потолок

th=0.0075;  (* толщина линии *)
d=.35; (* период штриховки *)

Пружина

w=5; (* количество витков *)
ρ=.5; (* радиус витков *)
α=.2; (* ракурс *)

Область изображения

A=5; (* полуразмер *)
p=1.17; (* вертикальный сдвиг *)

Базовое решение

pic0[r_,φ_]:=
Graphics[{

InfiniteLine[{{0,0},{1,0}}], (* потолок *)

Rotate[Plot[ρ TriangleWave[w(z/(r-R))],{z,0,r-R}][[1]],φ-(π/2),{0,0}], (* пружина *)

Disk[{r Sin[φ],-r Cos[φ]},R] (* груз *)

},PlotRange->{{-A,A},{-2A+p,p}}];

pic0[5,.5]

Manipulate[pic0[r,φ],{{r,5},2.5,8},{{φ,.5},-(π/2),(π/2)}]

Полное решение

SpringPlot[L_]:=ParametricPlot[{ρ Cos[z+(π/2)],-(α (Sin[z-(π/2)]+1)+((L-α+α Cos[(1+2 w) π])/((1+2 w) π)) z)},{z,0,(2w+1)π},
PlotStyle->Directive[Thickness[th],Gray]];
pic[r_,φ_]:=
Graphics[{

Rotate[SpringPlot[r-R][[1]],φ,{0,0}], (* пружина *)

Thickness[th],InfiniteLine[{{0,0},{1,0}}], (* потолок *)
Thickness[th/1.5],Line[{{#,0},{#+.5,.5}}]&/@Range[-1.15A,A,d], (* штриховка *)

,Disk[{r Sin[φ],-r Cos[φ]},R] (* груз *)

},PlotRange->{{-A,A},{-2A+p,p}}];

pic[5,.5]

Manipulate[pic[r,φ],{{r,5},2.5,8},{{φ,.5},-(π/2),(π/2)}]

Максимальное решение с обозначениями

(* груз *)
ball={
,Disk[{0,0},1], (* тень *)
RegionPlot[RegionIntersection[Disk[{0,0},1],Disk[{.2,0+.2},.95]],PlotStyle->,BoundaryStyle->None][[1]], (* силуэт *)
,Rotate[Disk[{.5,.5},{.15,.1}],-π/4] (* блик *)
};
(*Graphics[ball]*)

SpringLine[L_]:=
Line@Join[{{0,0}},
ParametricPlot[{ρ Cos[z-(π/2)],-(.5+α (Sin[z-(π/2)]+1)+((L-1-α+α Cos[(1+2 w) π])/((1+2 w) π)) z)},{z,0,(2w+1)π},
PlotStyle->Directive[Thickness[th],Gray]][[1,1,3,1,2,1]],
{{0,-L}}
];
(*Graphics[{,Thickness[th],SpringLine[5]}]*)

Pic[r_,φ_]:=
Graphics[{

Rotate[{,Thickness[th],SpringLine[r-R]},φ,{0,0}], (* пружина *)

Thickness[th],InfiniteLine[{{0,0},{1,0}}], (* потолок *)
Thickness[th/1.5],Line[{{#,0},{#+.5,.5}}]&/@Range[-1.15A,A,d], (* штриховка *)

Inset[Graphics[ball,PlotRangePadding->None],r{Sin[φ],-Cos[φ]},{0,0},2R] ,(* груз *)

(* обозначения *)
{,
Dashing[.4/(2A)],
Line[{{0,0},{0,-5}}],
Dashing[{}],
Arrow[{{0,0},r{ Sin[φ],- Cos[φ]}}],
Inset[Style["r",24],.9r{Sin[φ],- Cos[φ]}+{0,Min[.4r Cos[φ],1]},Automatic,{1,1}],
Circle[{0,0},1.,{0,φ}-π/2],
Inset[Style["φ",24],Offset[.65 24{Sin[(φ/2)],-Cos[(φ/2)]},1.1{Sin[(φ/2)],-Cos[(φ/2)]}],Automatic,1{1,1}],
Arrow[(#+r{ Sin[φ],- Cos[φ]})&/@{{0,0},{ Sin[1],- Cos[1]}}],
Inset[Style["R",24],(r){Sin[φ],- Cos[φ]}+{0,-.6},Automatic,1{1,1}]
}
},PlotRange->{{-A,A},{-2A+p,p}}];

Pic[6,.6]

Manipulate[Pic[r,φ],{{r,6},2.5,8},{{φ,.6},-(π/2),(π/2)}]